//
//  UILabel+theme.m
//  OC背景主题
//
//  Created by Hahn on 2018/11/1.
//  Copyright © 2018 今晚打老虎. All rights reserved.
//

#import "UILabel+theme.h"
#import "theme.h"
#import "UIView+theme.h"
// 添加runtime头文件
#import <objc/runtime.h>

@implementation UILabel (theme)

#pragma mark - 添加textType的set,get方法

- (void)setTextType:(id)textType {
    /**
     为KVO创建观察者
     objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy)
      id object                     :表示关联者，是一个对象，变量名理所当然也是object
      const void *key               :获取被关联者的索引key
      id value                      :被关联者，这里是一个block
     policy：关联策略。有五种关联策略。
     OBJC_ASSOCIATION_ASSIGN 等价于 @property(assign)。
     OBJC_ASSOCIATION_RETAIN_NONATOMIC等价于 @property(strong, nonatomic)。
     OBJC_ASSOCIATION_COPY_NONATOMIC等价于@property(copy, nonatomic)。
     OBJC_ASSOCIATION_RETAIN等价于@property(strong,atomic)。
     OBJC_ASSOCIATION_COPY等价于@property(copy, atomic)。
     */
    objc_setAssociatedObject(self, @selector(textType), textType, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    
}

- (id)textType {
    /**
     objc_getAssocicatedObject用于获取关联对象的值。
     */
    return objc_getAssociatedObject(self, @selector(textType));
}

#pragma mark - 开始监听
- (void)startMonitor {
    //如果观察者有改变
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeColor) name:@"changeColor" object:nil];
}

#pragma mark - 改变颜色
- (void)changeColor {
    // texttype为NSNumber型, 变为NSInteger
    switch ([self.textType integerValue]) {
        case LabelColorBlack:
            [self setTextColor:[theme shareTheme].color2];
            [self setBackgroundColor:[UIColor clearColor]];
            break;
        case LabelColorGray:
            [self setTextColor:[theme shareTheme].color4];
            [self setBackgroundColor:[UIColor clearColor]];
            break;
        default:
            break;
    }
}

#pragma mark - 设置颜色类型和对应颜色
-(void)themeTextType:(LabelColor)textType{
     self.textType = [NSNumber numberWithInteger:textType];
    [self changeColor];
    [self startMonitor];
}

@end
